#include "./stack-util.h"
#include <iostream>
#include <string.h>

using namespace std;

void decToOct(int origin)
{
	// 初始化栈
	SqStack stack;
	initStack(stack);
	while (origin != 0)
	{
		push(stack, origin % 8);
		origin /= 8;
	}
	while (!stackEmpty(stack))
	{
		cout << (int)pop(stack);
	}
	cout << endl;
}

int bracketsMatch(char *exp)
{
	SqStack stack;
	initStack(stack);
	int length = strlen(exp);
	for (int i = 0; i < length; i++)
	{
		// 所有的左括号压入栈
		if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{')
		{
			push(stack, exp[i]);
		}
		else if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}')
		{
			// 遇到右括号则弹出
			// 如果遇到右括号，对栈弹出的时候，栈已经是空的了，说明有多余的右括号
			if (stackEmpty(stack))
			{
				return 0;
			}
			pop(stack);
		}
	}
	return stackEmpty(stack);
}

int isPalindrome(char *str)
{
	int length = strlen(str);
	if (length % 2 != 0)
	{
		return 0;
	}
	int midLength = length / 2;
	SqStack stack;
	initStack(stack);
	// 先把前一半压入栈
	for (int i = 0; i < midLength; i++)
	{
		push(stack, str[i]);
	}
	// 再把栈内字符依次弹出与后半部分比较
	for (int i = midLength; i < length; i++)
	{
		if (str[i] != pop(stack))
		{
			return 0;
		}
	}
	return 1;
}